#!/bin/bash

# 方法一: 使用grep命令从/etc/group文件中提取sudo组的成员
# 该函数使用grep命令从/etc/group文件中查找以"sudo"开头的行
# -P选项启用Perl兼容的正则表达式
# -o选项只输出匹配的部分
# '^sudo.+:\K.*$'是正则表达式，\K表示从匹配的字符串中排除之前的部分
# 最终输出sudo组的成员列表
get_sudo_users_by_grep() {
  grep -Po '^sudo.+:\K.*$' /etc/group
}
# 将函数get_sudo_users_by_grep导出为可用的shell函数
export -f get_sudo_users_by_grep

# 方法二: 使用getent命令获取sudo组的成员
# 该函数使用getent命令获取系统中sudo组的信息
# 使用awk命令以冒号为分隔符(-F:)提取第四个字段，即sudo组的成员列表
get_sudo_users_by_getent() {
  getent group sudo | awk -F: '{print $4}'
}
# 将函数get_sudo_users_by_getent导出为可用的shell函数
export -f get_sudo_users_by_getent

# 方法三: 使用awk命令从/etc/group文件中提取sudo组的成员
# 该函数使用awk命令从/etc/group文件中查找以"sudo"开头的行
# 以冒号为分隔符(-F:)提取第四个字段，即sudo组的成员列表
get_sudo_users_by_awk() {
  awk -F: '/^sudo/ {print $4}' /etc/group
}
# 将函数get_sudo_users_by_awk导出为可用的shell函数
export -f get_sudo_users_by_awk

# 主函数，测试上述三种方法
main() {
  # 测试get_sudo_users_by_grep方法
  echo "Testing get_sudo_users_by_grep method..."
  get_sudo_users_by_grep

  # 测试get_sudo_users_by_getent方法
  echo "Testing get_sudo_users_by_getent method..."
  get_sudo_users_by_getent

  # 测试get_sudo_users_by_awk方法
  echo "Testing get_sudo_users_by_awk method..."
  get_sudo_users_by_awk
}

# 检查脚本是否被直接执行
# 如果是，则调用main函数
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  main "$@"
fi